In many conventional information distribution systems it has been found to be beneficial to employ a multi-tiered data storage approach with a plurality of data structures (e.g., a system with multiple processors where each processor has its own fast cache memory and all caches are connected to a shared memory subsystem). There are various strategies used to guarantee coherency between the plurality of data structures, an object of which is ensure that data items in one data structure are synchronized with data items in another data structure.
One strategy is to use a directory. The directory is a record of what data is contained in the local data structure (e.g., cache) of each data source/recipient (e.g., processor), and the directory is maintained by a central data structure (e.g., the memory subsystem). Then, when any one data source/recipient (e.g., processor) seeks to alter a data item in an associated local data structure it first informs the central data structure (e.g., memory subsystem), which then forces all other data source/recipients (e.g., processors) to discard their copies of that data item in the local data structures.
Another strategy employs broadcast, in which a data source/recipient (e.g., processor) that seeks to modify a data item must broadcast this fact to other data source/recipients (e.g., processors) so that they are forced to read the updated version from the modifying data source/recipient's (e.g., processor's) local data structure before attempting to use the data item. Both of these strategies are impractical in the context of a web application, as described in greater detail below.